package com.chris.getfile.comm;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * IO 操作类
 * 苏斌 2021-8-29 21：15
 * 2021-10-4 增加删除非空文件夹方法
 */
public class IoUtil {

    /**
     * 创建目录（自动添加 年 / 月/日)
     *
     * @param PhysicsPath 物理根路径
     * @return 虚拟相对路径（注意liunx , windows ,路径都用 /)
     */
    public String DoCreateDir(String PhysicsPath) {
        String VisualPath = "";
        //------------------------创建上传文件夹------------------
        String data_path = new SimpleDateFormat("/yyyy/yyyy-MM-dd/").format(new Date());
        File targetFile = new File(PhysicsPath  + data_path);
        VisualPath = data_path;
        //判断文件父目录是否存在
        if (!targetFile.exists()) {
            //不存在就创建一个
            targetFile.mkdirs();//注意有个坑： 是 mkdirs 非mkdir
            //File.
        }
        return VisualPath;
    }

    /**
     * 创建目录（纯文件夹)
     *
     * @param PhysicsPath 物理根路径
     * @return 虚拟相对路径（注意liunx , windows ,路径都用 /)
     */
    public String DoCreateDirOnly(String PhysicsPath) {
        String VisualPath = "";
        //------------------------创建上传文件夹------------------
        //String data_path=new SimpleDateFormat("/yyyy-MM-dd/").format(new Date());
        File targetFile = new File(PhysicsPath);
        VisualPath = PhysicsPath;
        //判断文件父目录是否存在
        if (!targetFile.exists()) {//.getParentFile()
            //不存在就创建一个
            targetFile.mkdirs();//注意有个坑： 是 mkdirs 非mkdir
            //File.
        }
        return "";
    }

    /**
     * 递归删除（非空）文件夹
     * @param dir
     */
    public  void deleteDir(File dir) {
        if (dir == null || !dir.exists() || !dir.isDirectory())
            return; // 检查参数
        for (File file : dir.listFiles()) {
            if (file.isFile())
                file.delete(); // 删除所有文件
            else if (file.isDirectory())
                deleteDir(file); // 递规的方式删除文件夹
        }
        dir.delete();// 删除目录本身
    }

    /**
     * 创建文件
     * @param filename
     * @throws IOException
     */
    public void doCreatFile(String filename) throws IOException {
        File targetFile = new File(filename);
        //判断文件父目录是否存在
        if (!targetFile.exists()) {
            //不存在就创建一个
            //targetFile.mkdirs();//注意有个坑： 是 mkdirs 非mkdir
            //创建新文件
            targetFile.createNewFile();
        }
    }

    /**
     * 获取文件内容
     * @param filename
     * @return
     * @throws IOException
     */
    public String doGetFile(String filename) {
        /* 读入TXT文件 */
       // String pathname = "//SnowFlake.key"; // 绝对路径或相对路径都可以
        File targetFile=null;
        InputStreamReader reader=null;
        BufferedReader br=null;
        String line = "";
        try {
            targetFile = new File(filename); // 要读取以上路径的input。txt文件
            if (targetFile.exists()) {
                reader = new InputStreamReader(
                        new FileInputStream(targetFile)); // 建立一个输入流对象reader
                br = new BufferedReader(reader); // 建立一个对象，它把文件内容转成计算机能读懂的语言
                StringBuffer sbf = new StringBuffer();
                String tmp = null;//br.readLine();
                while ((tmp = br.readLine()) != null) {
                    // line = br.readLine(); // 一次读入一行数据
                    // line+=tmp;
                    sbf.append(tmp+"\n");
                }
                line = sbf.toString();
            }
        }
        catch (Exception ex)
        {
        }
        finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
        return line;
    }

    /**
     * 写入文件
     * @param filename
     * @param content
     * @throws IOException
     */
    public void doWriteFile(String filename,String content)  {
        File targetFile =null;
        BufferedWriter out=null;
        try {
            /* 写入Txt文件 */
            targetFile = new File(filename); // 相对路径，如果没有则要建立一个新的output。txt文件
            if (!targetFile.exists()) {
                targetFile.createNewFile(); // 创建新文件
            }
            out = new BufferedWriter(new FileWriter(targetFile));
            out.write(content); // \r\n即为换行
            out.flush(); // 把缓存区内容压入文件
            out.close(); // 最后记得关闭文件
        }
        catch (Exception ex)
        {
        }
        finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }


}
